
#include "nane/RenderSystem/ConstantBuffer.h"
#include "nane/RenderSystem/ConstantBufferImpl_.h"
#include "nane/RenderSystem/RenderSystemImpl_.h"

namespace nane
{
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ConstantBuffer::ConstantBuffer( const NullType& )
        : SubSystemProduct()
        , m( NULL )
    {

    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ConstantBuffer::ConstantBuffer( Implementation* _impl )
        : SubSystemProduct( _impl )
        , m( _impl )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    ConstantBuffer::ConstantBuffer( const ConstantBuffer& _other )
        : SubSystemProduct( _other )
        , m( _other.m )
    {
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
    void ConstantBuffer::SetConstant( uint32 _slot, float _cx, float _cy, float _cz, float _cw )
    {
        NANE_ASSERT_R( m != NULL, "ConstantBuffer must be valid" );
        NANE_ASSERT_R( _slot < m->slots, "slot must be valid" );
        float c[4] = { _cx, _cy, _cz, _cw };
        m->creator->interface->PushConstantF(m->interface, _slot * sizeof(float) * 4, c, sizeof(float) * 4);
    }
    ////////////////////////////////////////////////////////////////////////////////////////////////
}   // namespace nane
